home *** CD-ROM | disk | FTP | other *** search
Wrap
/* graphics: math routines by Cary Clark, Georgiann Delaney, Herb Derby, Michael Fairman, Pablo Fernicola, Dave Good, Josh Horwich, Barton House, Robert Johnson, Keith McGreggor, Mike Reed, Oliver Steele, David Van Brink, Chris Yerga Copyright 1987 - 1994 Apple Computer, Inc. All rights reserved. */ #pragma once #ifndef mathRoutinesIncludes #define mathRoutinesIncludes #ifdef __powerc #ifndef __FIXMATH__ #ifdef fixed1 #undef fixed1 #undef fract1 #endif #include <FixMath.h> #endif #endif #ifndef mathTypesIncludes #include "math types.h" #endif #ifndef graphicsLinkageIncludes #include "graphics linkage.h" #endif #ifdef __cplusplus extern "C" { #endif gxMapping *CopyToMapping(gxMapping *target, const gxMapping *source) GXInlineCode(0x31, gxNeedClient); gxMapping *InvertMapping(gxMapping *target, const gxMapping *source) GXInlineCode(0x32, gxNeedClient); gxMapping *MapMapping(gxMapping *target, const gxMapping *source) GXInlineCode(0x33, gxNeedClient); gxMapping *MoveMapping(gxMapping *target, Fixed hOffset, Fixed vOffset) GXInlineCode(0x34, gxNeedClient); gxMapping *MoveMappingTo(gxMapping *target, Fixed hPosition, Fixed vPosition) GXInlineCode(0x35, gxNeedClient); gxMapping *NormalizeMapping(gxMapping *target) GXInlineCode(0x36, gxNeedClient); gxMapping *RotateMapping(gxMapping *target, Fixed angle, Fixed xCenter, Fixed yCenter) GXInlineCode(0x37, gxNeedClient); gxMapping *ScaleMapping(gxMapping *target, Fixed hFactor, Fixed vFactor, Fixed xCenter, Fixed yCenter) GXInlineCode(0x38, gxNeedClient); gxMapping *ResetMapping(gxMapping *target) GXInlineCode(0x39, gxNeedClient); gxMapping *SkewMapping(gxMapping *target, Fixed skewX, Fixed skewY, Fixed xCenter, Fixed yCenter) GXInlineCode(0x3a, gxNeedClient); void MapPoints(const gxMapping *source, long count, gxPoint vector[]) GXInlineCode(0x3b, gxNeedClient); short FirstBit(unsigned long) GXInlineCode(0x3c, gxNeedClient); short WideScale(const wide *source) GXInlineCode(0x3d, gxNeedClient); short LinearRoot(Fixed first, Fixed last, fract t[]) GXInlineCode(0x3e, gxNeedClient); short QuadraticRoot(Fixed first, Fixed control, Fixed last, fract t[]) GXInlineCode(0x3f, gxNeedClient); gxPoint *PolarToPoint(const gxPolar *, gxPoint *) GXInlineCode(0x40, gxNeedClient); gxPolar *PointToPolar(const gxPoint *, gxPolar *) GXInlineCode(0x41, gxNeedClient); fract FractCubeRoot(fract source) GXInlineCode(0x42, gxNeedClient); fract FractDivide(fract dividend, fract divisor) GXInlineCode(0x43, gxNeedClient); fract FractMultiply(fract multiplicand, fract multiplier) GXInlineCode(0x44, gxNeedClient); fract FractSineCosine(Fixed degrees, fract *cosine) GXInlineCode(0x45, gxNeedClient); fract FractSquareRoot(fract source) GXInlineCode(0x46, gxNeedClient); Fixed FixedDivide(Fixed dividend, Fixed divisor) GXInlineCode(0x47, gxNeedClient); Fixed FixedMultiply(Fixed multiplicand, Fixed multiplier) GXInlineCode(0x48, gxNeedClient); /* This next call is (source * multiplier / divisor) -- it avoids underflow, overflow by using wides */ long MultiplyDivide(long source, long multiplier, long divisor) GXInlineCode(0x49, gxNeedClient); unsigned long Magnitude(long deltaX, long deltaY) GXInlineCode(0x4a, gxNeedClient); long VectorMultiplyDivide(long count, const long *vector1, long step1, const long *vector2, long step2, long divisor) GXInlineCode(0x4b, gxNeedClient); #ifndef __powerc wide *WideAdd(wide *target, const wide *source) GXInlineCode(0x4c, gxNeedClient); short WideCompare(const wide *target, const wide *source) GXInlineCode(0x4d, gxNeedClient); wide *WideNegate(wide *target) GXInlineCode(0x4e, gxNeedClient); wide *WideShift(wide *target, long shift) GXInlineCode(0x4f, gxNeedClient); unsigned long WideSquareRoot(const wide *source) GXInlineCode(0x50, gxNeedClient); wide *WideSubtract(wide *target, const wide *source) GXInlineCode(0x51, gxNeedClient); wide *WideMultiply(long multiplicand, long multiplier, wide *target) GXInlineCode(0x52, gxNeedClient); long WideDivide(const wide *dividend, long divisor, long *remainder) GXInlineCode(0x53, gxNeedClient); /* returns the quotient */ #endif wide *VectorMultiply(long count, const long *vector1, long step1, const long *vector2, long step2, wide *dot) GXInlineCode(0x54, gxNeedClient); #ifndef __powerc wide *WideWideDivide(wide *dividend, long divisor, long *remainder) GXInlineCode(0x55, gxNeedClient); /* quotient replaces dividend */ #endif unsigned long RandomBits(long count, long focus) GXInlineCode(0x56, gxNeedClient); void SetRandomSeed(const wide *seed) GXInlineCode(0x57, gxNeedClient); wide *GetRandomSeed(wide *seed) GXInlineCode(0x58, gxNeedClient); #ifdef __cplusplus } #endif #define FixedRound(a) ((short)((Fixed)(a) + fixed1/2 >> 16)) #define FixedSquareRoot(a) ((Fixed)FractSquareRoot(a) + 64 >> 7) #define FixedTruncate(a) ((short)((Fixed)(a) >> 16)) #define FixedToFract(a) ((fract)(a) << 14) #define FractToFixed(a) ((Fixed)(a) + 8192L >> 14) #define FixedToInt(a) ((short)((Fixed)(a) + fixed1/2 >> 16)) #define IntToFixed(a) ((Fixed)(a) << 16) #define FixedToFloat(a) ((float)(a) / fixed1) #define FloatToFixed(a) ((Fixed)((float)(a) * fixed1)) #define FractToFloat(a) ((float)(a) / fract1) #define FloatToFract(a) ((fract)((float)(a) * fract1)) #define ColorToFract(a) (((fract) (a) << 14) + ((fract)(a) + 2 >> 2)) #define FractToColor(a) ((gxColorValue) ((a) - ((a) >> 16) + 8191 >> 14)) #define ff(a) IntToFixed(a) #define fl(a) FloatToFixed(a) #endif